Soru & Cevap

Context ...

21.12.2014 - 09:47

Merhaba arkadaşlar.Activity extends etmediğimiz class'ımızda Activity metotlarınıda kullanamıyoruz.Bu soruyu sorduğumuzda çözümüde context kavramını kullanmak olarak bir cevap alıyorum.Ancak bu context kavarmı hakkında baya bilgi eksiğim var.Bu konuyu Activty class' ı ve normal bir class üzerinden örnek le anlatabilecek veya kaynak gösterecek arkadaşımız varmı?

12 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-7661-1418285218.jpg
zafermuhammed93
21.12.2014 - 05:52

2. Ornek 

Bu class'ımızda

[code]
public class CustomPhoneStateListener extends PhoneStateListener {.

    .

    .     .     }
[/code]

activity Extends edlimedi ği için startActivtyForResault çalışmaz ben bunu burda nasıl çalıştırabilrm

[code]
private static final int ACTIVITY_RECORD_SOUND = 1; Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent, ACTIVITY_RECORD_SOUND);


protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { switch (requestCode) { case ACTIVITY_RECORD_SOUND: data.getDataString(); break; } } }
 


[/code]

hocam 1.ve 2. cevaplardaki context Kullanımı nasıl olmalıdr

 

Muhammed ÇOBANOĞLU
22.12.2014 - 03:06
"MainActivity" içerisinde "CustomPhoneStateListener" bu sınıfı nasıl kullandığını bilmemekle birlikte eğer bu sınıfı MainActivity içerisinde çağırıyorsan "CustomPhoneStateListener" sınıfı içerisinde bir tane context değeri alan construtor oluşturup oraya "MainActivity" içerisinde tanımladığın context'i gönderebilirsin. Yani private Context contex; public CustomPhoneStateListener(Context contex){ this.context = context; } şeklinde bir constructor oluşturarak "context. startActivityForResult()" şeklinde bir kullanım yapabilirsin.
picture-7661-1418285218.jpg
zafermuhammed93
21.12.2014 - 05:48

Hocam örnek üzerinde göstermek gerekirse.

1.Ornek Olarak;

 

[code]public class MainActivity extends Activity{

....

...

@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING);
    }.

.

.

.

public  void startRecording(){
                recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
                                                RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize);

                recorder.startRecording();

                isRecording = true;

                recordingThread = new Thread(new Runnable() {

                        @Override
                        public void run() {
                                writeAudioDataToFile();
                        }
                },"AudioRecorder Thread");

                recordingThread.start();
        }

.

.

.

[/code] Böyle Bir activity class'ımzda startRecord metot'umuzu var.

Bu metotdu;

[code]public class CustomPhoneStateListener extends PhoneStateListener {.

.

.

.

}[/code] Bu class'ımda nasıl çağıracağım

 

 

Muhammed ÇOBANOĞLU
22.12.2014 - 02:59
"startRecording()" bu metodu "public void" değil de "public static void" olarak tanımladığında" MainActivity.startRecording()" şeklinde çağırabilirsin.
picture-31404-1421919825.png
muhcob
21.12.2014 - 01:17

Activity içerisinde bir tane "Context" tanımlayarak dışardan istediğin gibi ulaşabilirsin.

MainActivity.java

...

public static Context context;

onCreate(){

context = MainActivity.this;

}

Dışardan bu class'ın context'ine ulaşmak istersen MainActivity.context ile ulaşabilirsin.

Kolay gelsin.

Ahmet Burak Demirkoparan
21.12.2014 - 02:27
Static context tanımlamak sakıncalıdır memory leak'a sebep olur.O yüzden this parametresini senin üzerinden işlem yapacak classa göndermek daha mantıklıdır.
Muhammed ÇOBANOĞLU
21.12.2014 - 02:53
Yorumun için teşekkür ederim.